package question2;

/**
 * Classe de gestionnaire du plus haut niveau.
 * 
 * @author Jacquemin Thibault
 * @author Marleix Mathieu
 *
 * @param <T>
 */
public abstract class Handler<T>
{
	protected Handler<T> successor= null;

	/**
	 * Methode de creation d'un gestionnaire sans successeur. 
	 */
	public Handler()
	{
		this.successor= null;
	} // Handler()

	/**
	 * Methode de creation d'un gestionnaire avec successeur.
	 * @param successor
	 */
	public Handler( Handler<T> successor )
	{
		this.successor= successor;
	} // Handler()

	/**
	 * Methode de changement de successeur.
	 * @param successor
	 */
	public void setSuccessor( Handler<T> successor )
	{
		this.successor= successor;
	} // setSuccessor()

	/**
	 * Methode d'obtention du successeur courant.
	 * @return successor : le successeur
	 */
	public Handler<T> getSuccessor()
	{
		return this.successor;
	} // getSuccessor()

	/**
	 * Prise en charge de la requete par le gestionnaire.
	 * @param value : Float transmis par un des successeurs
	 */
	public boolean handleRequest( T value )
	{
		if ( successor == null )   return false;
		return successor.handleRequest( value );
	}
} // Handler
